package com.ood.device.hik.utils;

import com.ood.device.hik.core.HCNetSDK;

/**
 * 功能：透传接口实现，透传ISAPI命令
 *
 * @author zsj
 */
public class TransIsapi {
	public static String get_isapi(int lUserID, String url, HCNetSDK hCNetSDK) {
		HCNetSDK.NET_DVR_XML_CONFIG_INPUT struXMLInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
		struXMLInput.read();
		HCNetSDK.BYTE_ARRAY stringRequest = new HCNetSDK.BYTE_ARRAY(1024);
		stringRequest.read();
		//输入ISAPI协议命令
		System.arraycopy(url.getBytes(), 0, stringRequest.byValue, 0, url.length());
		stringRequest.write();
		struXMLInput.dwSize = struXMLInput.size();
		struXMLInput.lpRequestUrl = stringRequest.getPointer();
		struXMLInput.dwRequestUrlLen = url.length();
		struXMLInput.lpInBuffer = null;
		struXMLInput.dwInBufferSize = 0;
		struXMLInput.write();

		HCNetSDK.BYTE_ARRAY stringXMLOut = new HCNetSDK.BYTE_ARRAY(8 * 1024);
		stringXMLOut.read();
		HCNetSDK.BYTE_ARRAY struXMLStatus = new HCNetSDK.BYTE_ARRAY(1024);
		struXMLStatus.read();
		HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struXMLOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
		struXMLOutput.read();
		struXMLOutput.dwSize = struXMLOutput.size();
		struXMLOutput.lpOutBuffer = stringXMLOut.getPointer();
		struXMLOutput.dwOutBufferSize = stringXMLOut.size();
		struXMLOutput.lpStatusBuffer = struXMLStatus.getPointer();
		struXMLOutput.dwStatusSize = struXMLStatus.size();
		struXMLOutput.write();
		if (!hCNetSDK.NET_DVR_STDXMLConfig(lUserID, struXMLInput, struXMLOutput)) {
			int iErr = hCNetSDK.NET_DVR_GetLastError();
			System.err.println("NET_DVR_STDXMLConfig失败，错误号" + iErr+"----URL:"+url);
			return null;
		} else {
			stringXMLOut.read();
			System.out.println("输出文本大小：" + struXMLOutput.dwReturnedXMLSize);
			//打印输出XML文本
			String strOutXML = new String(stringXMLOut.byValue).trim();
			System.out.println(strOutXML);
			struXMLStatus.read();
			String strStatus = new String(struXMLStatus.byValue).trim();
			System.out.println(strStatus);
			return strOutXML;
		}
	}


	public static String put_isapi(int lUserID, String url, String inputXml,HCNetSDK hCNetSDK) {
		HCNetSDK.NET_DVR_XML_CONFIG_INPUT struXMLInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
		struXMLInput.read();
		HCNetSDK.BYTE_ARRAY stringRequest = new HCNetSDK.BYTE_ARRAY(1024);
		stringRequest.read();
		//输入ISAPI协议命令
		System.arraycopy(url.getBytes(), 0, stringRequest.byValue, 0, url.length());
		stringRequest.write();
		struXMLInput.dwSize = struXMLInput.size();
		struXMLInput.lpRequestUrl = stringRequest.getPointer();
		struXMLInput.dwRequestUrlLen = url.length();
		HCNetSDK.BYTE_ARRAY ptrInBuffer = new HCNetSDK.BYTE_ARRAY(inputXml.length());
		ptrInBuffer.read();
		System.arraycopy(inputXml.getBytes(), 0, ptrInBuffer.byValue, 0, inputXml.length());
		ptrInBuffer.write();
		struXMLInput.lpInBuffer = ptrInBuffer.getPointer();
		struXMLInput.dwInBufferSize = inputXml.length();
		struXMLInput.write();
		HCNetSDK.BYTE_ARRAY stringXMLOut = new HCNetSDK.BYTE_ARRAY(8 * 1024);
		stringXMLOut.read();
		HCNetSDK.BYTE_ARRAY struXMLStatus = new HCNetSDK.BYTE_ARRAY(1024);
		struXMLStatus.read();
		HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struXMLOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
		struXMLOutput.read();
		struXMLOutput.dwSize = struXMLOutput.size();
		struXMLOutput.lpOutBuffer = stringXMLOut.getPointer();
		struXMLOutput.dwOutBufferSize = stringXMLOut.size();
		struXMLOutput.lpStatusBuffer = struXMLStatus.getPointer();
		struXMLOutput.dwStatusSize = struXMLStatus.size();
		struXMLOutput.write();
		if (!hCNetSDK.NET_DVR_STDXMLConfig(lUserID, struXMLInput, struXMLOutput)){
			int iErr = hCNetSDK.NET_DVR_GetLastError();
			System.err.println("NET_DVR_STDXMLConfig失败，错误号" + iErr+"----URL:"+url);
			return null;
		} else {
			stringXMLOut.read();
			System.out.println("输出文本大小：" + struXMLOutput.dwReturnedXMLSize);
			//打印输出XML文本
			String strOutXML = new String(stringXMLOut.byValue).trim();
			struXMLStatus.read();
			String strStatus = new String(struXMLStatus.byValue).trim();
			return strOutXML;
		}
	}
}
